package QianFeng04;

/**final关键字
 * 使用final关键字完成以下的操作:
 * 1、使用final关键字声明一个常量
 *      修饰属性或者修饰局部变量(最终变量)，也称为常量，常量的命名规则建议使用全大小。
 * 2、使用final关键字声明一个方法
 *      该方法为最终方法，且只能被子类继承，但是不能被子类重写。
 * 3、使用final关键字声明一个类
 *      该类就转变为最终类，没有子类的类，final修饰的类无法被继承。
 * 4、在方法参数中使用final, 在该方法内部不能修改参数的值(在内部类中详解)
 *
 * 常量类：在该类中只有常量，通常是应用程序中公共的常量或标记
 **/
public class Test3 {
    public static final int PERSON_NUM = 10;//常量，固定的值

    public static void main(String[] args) {
        System.out.println(Constant.PERSON_NUM);//静态直接用类名引用
        FinalClass fs = new FinalClass();
        //fs.setLength();
    }
}

//常量类（工具类）:在实际项目开发中，常量类通常用于定义项目中一些公共的、不变的数据
final class Constant{
    public static final String SERVER_ROOT_URL = "http://www.baidu.com";
    public static final String CACHE_PATH = "data_cache";
    public static final int PERSON_NUM = 10;
}

class FinalClass{
    public final int DAY_NUM;//工作天数
    public FinalClass(){
        DAY_NUM = 23;
    }
    public final void print(){
        System.out.println("我是final方法");
    }

    public void setLength(final int size) {
        //size++;  报错，不能修改被final修饰的参数
        final int x = 20;
        System.out.println(x);
    }
}

class SubClass extends FinalClass{
    //final 定义的方法只能继承不能重写
    /*public void print(){   //SubClass中的print()无法覆盖重写FinalClass中的print()
        System.out.println();
    }*/
}

//final定义的类不能被继承
final class t1{ }
//class t2 extends t1{ }  报错，不能继承